home *** CD-ROM | disk | FTP | other *** search
Text File | 2000-09-28 | 9.3 KB | 180 lines | [TEXT/CWIE] |
- /*
- File: SetupGL.h
-
- Contains: Functions to enable build and destory a GL fullscreen context
-
- Written by: Geoff Stahl (ggs)
-
- Copyright: Copyright © 1999 Apple Computer, Inc., All Rights Reserved
-
- Change History (most recent first):
-
- <7> 3/21/00 ggs Added windowed mode and clean up various implementation details
- <6> 1/26/00 ggs Add fade code back in, ensure NULL pointer/context/drawable
- checks are in, add Preflight
- <5> 1/24/00 ggs Added get device num and get gdhandle from point routines, add
- support for compiling from C++
- <4> 12/18/99 ggs Fix headers
- <3> 11/28/99 ggs Split out DSp and error handling. Added texture memory
- considerations, assume VRAM is required if other than zero
- <3> 11/12/99 ggs add pixel format and freq return
- <2> 11/12/99 ggs 1.0 Interface complete
- <1> 11/11/99 ggs Initial Add
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under Apple’s
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- */
-
-
- // Usage notes:
-
-
-
- // include control --------------------------------------------------
-
- #ifndef SetupGL_h
- #define SetupGL_h
-
-
- // includes ---------------------------------------------------------
-
- #include <DrawSprocket.h>
-
- #include <agl.h>
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- // structures (public) -----------------------------------------------
-
- struct structGLInfo // storage for setup info
- {
- short width; // input: width of drawable (screen width in full screen mode), return: actual width allocated
- short height; // input: height of drawable (screen height in full screen mode), return: actual height allocated
- Boolean fSizeMust; // input: dspContext must be requested display size (ignored in window mode)
- // if fSizeMust display size will not be stepped down to try to find a match,
- // if display is stepped down aspect ratio will be maintained for returned size
- short pixelDepth; // input: requested pixel depth
- Boolean fDepthMust; // input: pixel depth must be set (if false then current depth will be used if able)
- Boolean fFullscreen; // input: use DSp to get fullscreen? (or find full screen renderer)
- // if fFullscreen, will search for full screen renderers first then use DSp for others
- // unless a device is specified, in which case we will try there first
- Boolean fAcceleratedMust; // input: must renderer be accelerated?
- GLint aglAttributes[64]; // input: pixel format attributes always required (reset to what was actually allocated)
- long VRAM; // input: minimum VRAM; output: actual (if successful otherwise input)
- long textureRAM; // input: amount of texture RAM required on card; output: same (used in allcoation to ensure enough texture
- AGLPixelFormat fmt; // input: none; output pixel format...
- int freq; // input: frequency request for display; output: actual
- };
- typedef struct structGLInfo structGLInfo;
- typedef struct structGLInfo * pstructGLInfo;
-
- // structure fro creating a context from a window
- struct structGLWindowInfo // storage for setup info
- {
- Boolean fAcceleratedMust; // input: must renderer be accelerated?
- GLint aglAttributes[64]; // input: pixel format attributes always required (reset to what was actually allocated)
- long VRAM; // input: minimum VRAM; output: actual (if successful otherwise input)
- long textureRAM; // input: amount of texture RAM required on card; output: same (used in allcoation to ensure enough texture
- AGLPixelFormat fmt; // input: none; output pixel format...
- Boolean fDraggable; // input: is window going to be dragable,
- // if so renderer check (accel, VRAM, textureRAM) will look at all renderers vice just the current one
- // if window is not dragable renderer check will either check the single device or short
- // circuit to software if window spans multiple devices
- // software renderer is consider to have unlimited VRAM, unlimited textureRAM and to not be accelerated
- };
- typedef struct structGLWindowInfo structGLWindowInfo;
- typedef struct structGLWindowInfo * pstructGLWindowInfo;
-
- // public function declarations -------------------------------------
-
- // Checks for presense of OpenGL and DSp (if required)
- // Inputs: checkFullscreen: true if one wants to run fullscreen (which requires DrwSprocket currently)
- // Ouputs: true if OpenGL is installed (and DrawSprocket if checkFullscreen is true
- Boolean PreflightGL (Boolean checkFullscreen);
-
- // Takes device # and geometry request and tries to build best context and drawable
- // If requested device does not work, will start at first device and walk down devices
- // looking for first one that satisfies requirments
- // Devices are numbered in order that DMGetFirstScreenDevice/DMGetNextScreenDevice returns,
- // fullscreen devices are numbered after this, but they will be searched first if fFullscreen == true,
- // they will not be searched in the non-fullscreen case
-
- // Inputs: *pnumDevice: -1: main device, 0: any device, other #: attempt that device first, then any device
- // *pcontextInfo: request and requirements for cotext and drawable
-
- // Outputs: *paglDraw, *paglContext and *pdspContext as allocated
- // *pnumDevice to device number in list that was used
- // *pcontextInfo: allocated parameters
-
- // If fail to build context: paglDraw, paglContext and pdspContext will be NULL
- // If fatal error: will return error and paglDraw, paglContext and pdspContext will be NULL
- // Note: Errors can be generated internally when a specific device fails, this is normal and these
- // will not be returned is a subsequent device succeeds
- OSStatus BuildGL (AGLDrawable* paglDraw, AGLContext* paglContext, DSpContextReference* pdspContext,
- short* pnumDevice, pstructGLInfo pcontextInfo);
-
- // Destroys drawable and context
- // Ouputs: *paglDraw, *paglContext and *pdspContext should be 0 on exit
- OSStatus DestroyGL (AGLDrawable* paglDraw, AGLContext* paglContext, DSpContextReference* pdspContext, pstructGLInfo pcontextInfo);
-
-
- // same as above except that it takes a window as input and attempts to build requested conext on that
- OSStatus BuildGLFromWindow (AGLDrawable aglDraw, AGLContext* paglContext, pstructGLWindowInfo pcontextInfo);
-
- // same as above but destorys a context that was associated with an existing window, window is left intacted
- OSStatus DestroyGLFromWindow (AGLContext* paglContext, pstructGLWindowInfo pcontextInfo);
-
-
- // Pauses gl to allow toolbox drawing
- OSStatus PauseGL (AGLContext aglContext);
-
- // resumes gl to allow gl drawing
- OSStatus ResumeGL (AGLDrawable aglDraw, AGLContext aglContext);
-
- short FindGDHandleFromRect (Rect * pRect, GDHandle * phgdOnThisDevice);
-
- short FindGDHandleFromWindow (WindowPtr pWindow, GDHandle * phgdOnThisDevice);
-
- // returns the number of the device that the rect is mostly is on (i.e., where it is numerically in the search order)
- short FindDeviceNumFromRect (Rect * rect);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif // SetupGL_h